import { MESSAGE_TYPE } from '../../../helpers/constants'
import groupBy from 'lodash.groupby'
import { groupConversationBySender } from './helpers'
import { formatUnixDate } from '../../../helpers/DateHelper'

export const getters = {
  getAllMessagesLoaded: _state => _state.uiFlags.allMessagesLoaded,
  getIsCreating: _state => _state.uiFlags.isCreating,
  getIsAgentTyping: _state => _state.uiFlags.isAgentTyping,
  getConversation: _state => _state.conversations,
  getConversationSize: _state => Object.keys(_state.conversations).length,
  getEarliestMessage: _state => {
    const conversation = Object.values(_state.conversations)
    if (conversation.length) {
      return conversation[0]
    }
    return {}
  },
  getGroupedConversation: _state => {
    const conversationGroupedByDate = groupBy(
      Object.values(_state.conversations),
      message => formatUnixDate(message.createdAt)
    )
    return Object.keys(conversationGroupedByDate).map(date => ({
      date,
      messages: groupConversationBySender(conversationGroupedByDate[date])
    }))
  },
  getIsFetchingList: _state => _state.uiFlags.isFetchingList,
  getMessageCount: _state => {
    return Object.values(_state.conversations).length
  },
  getUnreadMessageCount: _state => {
    const { userLastSeenAt } = _state.meta
    const count = Object.values(_state.conversations).filter(chat => {
      const { created_at: createdAt, message_type: messageType } = chat
      const isOutGoing = messageType === MESSAGE_TYPE.OUTGOING
      const hasNotSeen = userLastSeenAt
        ? createdAt * 1000 > userLastSeenAt * 1000
        : true
      return hasNotSeen && isOutGoing
    }).length
    return count
  },
  getUnreadTextMessages: (_state, _getters) => {
    const unreadCount = _getters.getUnreadMessageCount
    const allMessages = [...Object.values(_state.conversations)]
    const unreadAgentMessages = allMessages.filter(message => {
      const { message_type: messageType } = message
      return messageType === MESSAGE_TYPE.OUTGOING
    })
    const maxUnreadCount = Math.min(unreadCount, 3)
    const allUnreadMessages = unreadAgentMessages.splice(-maxUnreadCount)
    return allUnreadMessages
  }
}
